-- https://github.com/ms-jpq/neovim-async-tutorial for more tips
local M = {}

function M.make()
  local lines = { '' }
  local winnr = vim.fn.win_getid()
  local bufnr = vim.api.nvim_win_get_buf(winnr)

  local makeprg = vim.api.nvim_buf_get_option(bufnr, 'GoBuild')
  if not makeprg then
    return
  end

  local cmd = vim.fn.expandcmd(makeprg)

  local function on_event(job_id, data, event)
    if event == 'stdout' or event == 'stderr' then
      if data then
        vim.list_extend(lines, data)
      end
    end

    if event == 'exit' then
      vim.fn.setqflist({}, ' ', {
        title = cmd,
        lines = lines,
        efm = vim.api.nvim_buf_get_option(bufnr, 'errorformat'),
      })
      vim.api.nvim_command('doautocmd QuickFixCmdPost')
    end
  end

  local job_id = vim.fn.jobstart(cmd, {
    on_stderr = on_event,
    on_stdout = on_event,
    on_exit = on_event,
    stdout_buffered = true,
    stderr_buffered = true,
  })
end

return M

-- command! Make silent lua require'async_make'.make()
-- nnoremap <silent> <space>m :Make<CR>
-- augroup LintOnSave
--   autocmd! BufWritePost <buffer> Make
-- augroup END
-- command! DisableLintOnSave autocmd! LintOnSave BufWritePost <buffer>
